home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 9 / The PC-SIG Library on CD ROM - Ninth Edition.iso / 001_100 / DISK0016 / DISK0016.ZIP / CHESS1.BAS < prev    next >
BASIC Source File  |  1982-08-30  |  21KB  |  372 lines

  1. 0 ' exit on error
  2. 1 CLEAR ,,2048:KEY OFF
  3. 2 CLS:COLOR 0,7:LOCATE 1,6:PRINT SPACE$(68)
  4. 3 LOCATE 2,6:PRINT" ********* Chess *********   By: M. C. Rakaska, Ides of March, 1980 "
  5. 4 LOCATE 3,6:PRINT SPACE$(68):LOCATE 4,6:PRINT"      Adapted for the IBM PC by  S. W. Huggins, December, 1981      "
  6. 5 LOCATE 5,6:PRINT SPACE$(68)
  7. 6 LOCATE 6,6:PRINT"                   <D-o-w-n-l-o-a-d-e-d  F-r-o-m>                   "
  8. 12 LOCATE 7,6:PRINT SPACE$(68):LOCATE 8,6:PRINT"  PC-NET #1 of Denver, Co.   303-773-2699 or Voice at 303-694-9038  "
  9. 13 LOCATE 9,6:PRINT SPACE$(68)
  10. 20 DEFINT A-Z:A=0:B=0:X=0:Y=0:S=0:A0=0:T=0:A8=0:A1=0:A2=0:A3=0:A4=0:B1=0:B6!=0:           H=0:M=0:N=0:P=0:W=0:A5=0:I=1
  11. 22 DIM C(64), A(10,10), B(10,10), T(10,10), S(8,8)
  12. 25 COLOR 7,0:LOCATE 18,1:PRINT"Important:  Use Caps Lock key to shift to UPPER CASE before continuing...."
  13. 30 LOCATE 21,1:INPUT "DO YOU WANT INSTRUCTIONS ";IN$:IN$=LEFT$(IN$,1):             IF IN$="Y" THEN GOSUB 2220
  14. 40 CL$="N"
  15. 50 CLS:INPUT "YOUR NAME IS ";B$:IF B$="" THEN B$=" HUMAN " ELSE B$=LEFT$(B$,9)
  16. 60 CLS:PRINT "LEVEL OF PLAY";:INPUT B8!:IF B8!=0 THEN B8!=1:B7!=1+RND(0)/2:ELSE    B7!=(B8!+1)/2+RND(0)/2
  17. 70 CLS:PRINT "DO YOU WANT WHITE ";B$;" ";:INPUT C$:GOSUB 790:IF LEFT$(C$,1)<>"N"   THEN GOSUB 900:GOTO 190
  18. 80 GOSUB 890:IF CL$="Y" THEN LOCATE 25,6,0:                                        PRINT "START ";TIME$;
  19. 100 F!=-99:A0=0:FOR J=1 TO 8:FOR K=1 TO 8:IF A(J,K)=99 THEN A6=J:A7=K
  20. 110 NEXT:NEXT
  21. 120 FOR X=1 TO 8:FOR Y=1 TO 8:IF A(X,Y)<0 THEN GOSUB 270:                           IF F!>=B7! THEN GOTO 150
  22. 130 NEXT:NEXT:IF F!>=-9 THEN GOTO 150 ELSE GOSUB 900
  23. 140 LOCATE 25,62,0: PRINT "I CONCEED    ";:GOTO 2190
  24. 150 A(R,U)=A(E,Q):A(E,Q)=1:IF A(R,U)=-2 AND U=1 THEN A(R,U)=-9
  25. 160 X=R:Y=U:A0=4:GOSUB 270:LOCATE 25,62,0:PRINT "IS MY MOVE    ";:                  LOCATE 25,51,0:PRINT CHR$(E+64);Q;"- "CHR$(R+64);U;
  26. 170 IF CL$="Y" THEN LOCATE 25,31,0:PRINT "STOP ";TIME$;
  27. 180 X=E:Y=Q:GOSUB 910:X=R:Y=U:GOSUB 910:IF C=1 THEN LOCATE 24,1,1:                  PRINT "CHECK ";:C=0 ELSE LOCATE 24,1,1:PRINT "      ";
  28. 190 IF X$="S" THEN GOSUB 1830:B7!=3*RND(0):LOCATE 25,1,1:PRINT "SELF-PLAYING";: GOSUB 2480:GOTO 100
  29. 195 LOCATE 25,1,1:PRINT "MOVE "+CHR$(7);B$;:GOSUB 1590:D=0:B4=A:B9=B:B5=0:IF A(X,Y)=2 AND Y=5 AND B=6 AND A(A,B)=1 AND ABS(A-X)=1 THEN B5=1:GOTO 220
  30. 200 IF X$="K" OR X$="Q" THEN GOSUB 900:LOCATE 25,1,0:PRINT STRING$(14," ");:        GOTO 100
  31. 210 IF X$="S" THEN CL$="N":GOTO 190:ELSE A0=3:GOSUB 250:                            IF D=0 THEN LOCATE 25,31,0:PRINT "ILLEGAL       ";:GOTO 190
  32. 220 LOCATE 25,31,1:PRINT "OK            ";:A=B4:B=B9:A(A,B)=A(X,Y):A(X,Y)=1:        GOSUB 910:X=A:Y=B:GOSUB 910:IF N$="N" THEN GOSUB 900:N$=" "
  33. 230 IF A(A,B)=2 AND B=8 THEN LOCATE 25,31,1:PRINT "WHAT PIECE";:GOSUB 2100:         X=A:Y=B:GOSUB 910:LOCATE 25,31,1:PRINT "              ";
  34. 240 IF B5=1 THEN A(A,B-1)=1:X=A:Y=B-1:GOSUB 910:GOTO 100:ELSE GOTO 100
  35. 250 LOCATE 1,78,0:PRINT "$ ";:                                                      ON A(X,Y) GOTO 0, 480, 0, 380, 330, 0, 280, 0, 330:GOTO 460
  36. 270 ON -A(X,Y) GOTO 0, 530, 0, 380, 330, 0, 280, 0, 330:GOTO 460
  37. 280 B=Y:FOR A=X+1 TO 8:GOSUB 640:IF S=0 THEN NEXT ELSE GOTO 290
  38. 290 FOR A=X-1 TO 1 STEP -1:GOSUB 640:IF S=0 THEN NEXT ELSE GOTO 300
  39. 300 A=X:FOR B=Y+1 TO 8:GOSUB 640:IF S=0 THEN NEXT ELSE GOTO 310
  40. 310 FOR B=Y-1 TO 1 STEP -1:GOSUB 640:IF S=0 THEN NEXT:RETURN ELSE RETURN
  41. 330 B=Y:FOR A=X+1 TO 8:B=B+1:GOSUB 640:IF S=0 THEN NEXT ELSE GOTO 340
  42. 340 B=Y:FOR A=X-1 TO 1 STEP -1:B=B-1:GOSUB 640:IF S=0 THEN NEXT ELSE GOTO 350
  43. 350 B=Y:FOR A=X-1 TO 1 STEP -1:B=B+1:GOSUB 640:IF S=0 THEN NEXT ELSE GOTO 360
  44. 360 B=Y:FOR A=X+1 TO 8:B=B-1:GOSUB 640: IF S=0 THEN NEXT ELSE GOTO 370
  45. 370 IF ABS(A(X,Y))=9 THEN GOTO 280:ELSE RETURN
  46. 380 A=X+2:B=Y+1:IF A<9 AND B<9 THEN GOSUB 650 ELSE GOTO 390
  47. 390 B=B-2:IF B>0 AND A<9 THEN GOSUB 650 ELSE GOTO 400
  48. 400 A=A-4:IF A>0 AND B>0 THEN GOSUB 650 ELSE GOTO 410
  49. 410 B=B+2:IF B<9 AND A>0 THEN GOSUB 650 ELSE GOTO 420
  50. 420 A=A+1:B=B+1:IF A>0 AND A<9 AND B<9 THEN GOSUB 650 ELSE GOTO 430
  51. 430 B=B-4:IF B>0 AND A>0 AND A<9 THEN GOSUB 650 ELSE GOTO 440
  52. 440 A=A+2:IF A>0 AND A<9 AND B>0 THEN GOSUB 650 ELSE GOTO 450
  53. 450 B=B+4:IF B<9 AND A>0 AND A<9 THEN GOSUB 650:RETURN ELSE RETURN
  54. 460 FOR A=X-1 TO X+1:FOR B=Y-1 TO Y+1:IF A(A,B)<>0 THEN GOSUB 650
  55. 470 NEXT:NEXT:RETURN
  56. 480 A=X:IF Y>2 THEN GOTO 500 ELSE GOTO 490
  57. 490 B=Y+1:IF A(A,B)=1 THEN GOSUB 660:B=B+1:IF A(A,B)=1 THEN GOSUB 660:GOTO 510:     ELSE GOTO 510:ELSE GOTO 510
  58. 500 B=Y+1:IF A(A,B)=1 THEN GOSUB 660 ELSE GOTO 510
  59. 510 A=X+1:B=Y+1:IF A(A,B)<0 THEN GOSUB 660 ELSE GOTO 520
  60. 520 A=A-2:IF A(A,B)<0 THEN GOSUB 660:RETURN:ELSE RETURN
  61. 530 A=X:IF Y<7 THEN GOTO 550 ELSE GOTO 540
  62. 540 B=Y-1:IF A(A,B)=1 THEN GOSUB 660:B=B-1:IF A(A,B)=1 THEN GOSUB 660:GOTO 560:     ELSE GOTO 560:ELSE GOTO 560
  63. 550 B=Y-1:IF A(A,B)=1 THEN GOSUB 660 ELSE GOTO 560
  64. 560 A=X-1:B=Y-1:IF A(A,B)>1 THEN GOSUB 660 ELSE GOTO 570
  65. 570 A=A+2:IF A(A,B)>1 THEN GOSUB 660:RETURN:ELSE GOTO 590
  66. 580 T=A(A,B):IF T=-99 THEN B1=T:RETURN:ELSE GOTO 590
  67. 590 A5=S:IF ABS(T)<=A(X,Y) THEN A(A,B)=A(X,Y):A(X,Y)=1:GOTO 610:ELSE GOTO 600
  68. 600 IF T<B1 THEN B1=T:S=A5:RETURN:ELSE S=A5:RETURN
  69. 610 A1=X:A2=Y:A3=A:A4=B:A8=T:A0=2:FOR X=1 TO 8:FOR Y=1 TO 8:                        IF A(X,Y)<0 THEN GOSUB 270:IF T=0 THEN GOTO 630
  70. 620 NEXT:NEXT
  71. 630 X=A1:Y=A2:A=A3:B=A4:A0=5:A(X,Y)=A(A,B):A(A,B)=A8:GOTO 600
  72. 640 S=0:IF A(A,B)=1 THEN GOTO 660 ELSE IF A(A,B)=0 THEN S=1:RETURN:                 ELSE IF SGN(A(A,B))=SGN(A(X,Y)) THEN S=1:RETURN:ELSE S=1:GOTO 660
  73. 650 IF A(A,B)=1 THEN GOTO 660 ELSE IF SGN(A(A,B))=SGN(A(X,Y)) THEN RETURN:          ELSE GOTO 660
  74. 660 LOCATE 1,78,0:PRINT "  ";:ON A0 GOTO 670, 680, 690, 700, 710:GOTO 720
  75. 670 IF A6=A AND A7=B THEN B1=B1+1:RETURN:ELSE RETURN
  76. 680 IF A3=A AND A4=B THEN T=0:RETURN:ELSE RETURN
  77. 690 IF B4=A AND B9=B THEN D=1:RETURN:ELSE RETURN
  78. 700 IF A6=A AND A7=B THEN C=1:RETURN:ELSE RETURN
  79. 710 IF A(A,B)<0 THEN GOTO 580 ELSE RETURN
  80. 720 B3=S:W=X:M=Y:N=A:H=B:P=A(A,B):A(A,B)=A(X,Y):A(X,Y)=1:B1=0
  81. 730 A0=5:FOR X=1 TO 8:FOR Y=1 TO 8:IF A(X,Y)>1 THEN GOSUB 250
  82. 740 NEXT:NEXT:X=N:Y=H:A0=1:GOSUB 270:A0=0:S=B3:X=W:Y=M:A=N:B=H:A(X,Y)=A(A,B):       A(A,B)=P
  83. 750 B6!=1/(ABS(4.5-A)+ABS(4.5-B)+1):IF A(X,Y)<-2 AND A(X,Y)>-9 THEN                 B6!=B6!+1/(ABS(A6-A)+ABS(A7-B)+5)+RND(0)/15
  84. 760 G!=P+B1+B6!:IF P=99 THEN GOSUB 900:                                             LOCATE 25,1,1:PRINT "MATE ";B$;:GOTO 2190
  85. 770 IF G!<=F! THEN RETURN
  86. 780 F!=G!:E=X:Q=Y:R=A:U=B:RETURN
  87. 790 CLS
  88. 800 Y=0:FOR J=896 TO 0 STEP -128:Y=Y+1:X=0:FOR K=J TO 42+J STEP 6:X=X+1:            T(X,Y)=K:NEXT:NEXT
  89. 810 Y=0:FOR J=960 TO 64 STEP -128:Y=Y+1:X=0:FOR K=J TO 42+J STEP 6:X=X+1:            B(X,Y)=K:NEXT:NEXT
  90. 820 DATA -7, -4, -5, -9, -99, -5, -4, -7
  91. 830 DATA -2, -2, -2, -2, -2, -2, -2, -2
  92. 840 DATA 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
  93. 850 DATA 2, 2, 2, 2, 2, 2, 2, 2
  94. 860 DATA 7, 4, 5, 9, 99, 5, 4, 7
  95. 870 FOR Y=8 TO 1 STEP -1:FOR X=1 TO 7 STEP 2:S(X,Y)=I:S(X+1,Y)=-I:NEXT:I=-I:NEXT
  96. 880 FOR Y=8 TO 1 STEP -1:FOR X=1 TO 8:READ A(X,Y):NEXT:NEXT:RETURN
  97. 890 I=-I:A(4,1)=99:A(5,1)=9:A(4,8)=-99:A(5,8)=-9
  98. 900 FOR Y=1 TO 8:FOR X=1 TO 8:GOSUB 910:NEXT:NEXT:RETURN
  99. 910 IF S(X,Y)>0 THEN GOTO 940
  100. 920 ON ABS(A(X,Y)) GOSUB 980, 1040, 0, 1340, 1440, 0, 1540, 0, 1140                   :IF ABS(A(X,Y))=99 THEN GOSUB 1240:RETURN ELSE RETURN
  101. 940 ON ABS(A(X,Y)) GOSUB 960, 990, 0, 1290, 1390, 0, 1490, 0, 1090                    :IF ABS(A(X,Y))=99 THEN GOSUB 1190:RETURN ELSE RETURN
  102. 960 IF S(X,Y)<0 THEN GOTO 980
  103. 970 LOCATE 25-Y*3,X*8+1,0
  104. 971 PRINT STRING$(8,CHR$(219));
  105. 972 LOCATE 26-Y*3,X*8+1,0
  106. 973 PRINT STRING$(8,CHR$(219));
  107. 974 LOCATE 27-Y*3,X*8+1,0
  108. 975 PRINT STRING$(8,CHR$(219));:RETURN
  109. 980 LOCATE 25-Y*3,X*8+1,0
  110. 981 PRINT STRING$(8," ");
  111. 982 LOCATE 26-Y*3,X*8+1,0
  112. 983 PRINT STRING$(8," ");
  113. 984 LOCATE 27-Y*3,X*8+1,0
  114. 985 PRINT STRING$(8," ");:RETURN
  115. 990 IF I*A(X,Y)<0 THEN GOTO 1020
  116. 1000 LOCATE 25-Y*3,X*8+1,0
  117. 1001 PRINT STRING$(8,CHR$(219));
  118. 1010 LOCATE 26-Y*3,X*8+1,0
  119. 1011 PRINT STRING$(3,CHR$(219));CHR$(2);STRING$(4,CHR$(219));
  120. 1012 LOCATE 27-Y*3,X*8+1,0
  121. 1013 PRINT STRING$(8,CHR$(219)):RETURN
  122. 1020 LOCATE 25-Y*3,X*8+1,0
  123. 1021 PRINT STRING$(8,CHR$(219));
  124. 1030 LOCATE 26-Y*3,X*8+1,0
  125. 1031 PRINT STRING$(3,CHR$(219));CHR$(1);STRING$(4,CHR$(219));
  126. 1032 LOCATE 27-Y*3,X*8+1,0
  127. 1033 PRINT STRING$(8,CHR$(219));:RETURN
  128. 1040 IF I*A(X,Y)<0 THEN GOTO 1070
  129. 1050 LOCATE 25-Y*3,X*8+1,0
  130. 1051 PRINT STRING$(8,CHR$(32));
  131. 1060 LOCATE 26-Y*3,X*8+1,0
  132. 1061 PRINT STRING$(3,CHR$(32));CHR$(2);STRING$(4,CHR$(32));
  133. 1062 LOCATE 27-Y*3,X*8+1,0
  134. 1063 PRINT STRING$(8,CHR$(32)):RETURN
  135. 1070 LOCATE 25-Y*3,X*8+1,0
  136. 1071 PRINT STRING$(8,CHR$(32));
  137. 1080 LOCATE 26-Y*3,X*8+1,0
  138. 1081 PRINT STRING$(3,CHR$(32));CHR$(1);STRING$(4,CHR$(32));
  139. 1082 LOCATE 27-Y*3,X*8+1,0
  140. 1083 PRINT STRING$(8,CHR$(32));:RETURN
  141. 1090 IF I*A(X,Y)<0 THEN GOTO 1120
  142. 1100 LOCATE 25-Y*3,X*8+1,0
  143. 1101 PRINT STRING$(2,CHR$(219));STRING$(3,CHR$(178));STRING$(3,CHR$(219));
  144. 1110 LOCATE 26-Y*3,X*8+1,0
  145. 1111 PRINT CHR$(219)+"QUEEN"+CHR$(219);CHR$(219);
  146. 1112 LOCATE 27-Y*3,X*8+1,0
  147. 1113 PRINT STRING$(2,CHR$(219));STRING$(3,CHR$(178));STRING$(3,CHR$(219));          :RETURN
  148. 1120 LOCATE 25-Y*3,X*8+1,0
  149. 1121 PRINT STRING$(2,CHR$(219));STRING$(3,CHR$(176));STRING$(3,CHR$(219));
  150. 1130 LOCATE 26-Y*3,X*8+1,0
  151. 1131 PRINT CHR$(219)+"QUEEN"+CHR$(219);CHR$(219);
  152. 1132 LOCATE 27-Y*3,X*8+1,0
  153. 1133 PRINT STRING$(2,CHR$(219));STRING$(3,CHR$(176));STRING$(3,CHR$(219));          :RETURN
  154. 1140 IF I*A(X,Y)<0 THEN GOTO 1170
  155. 1150 LOCATE 25-Y*3,X*8+1,0
  156. 1151 PRINT STRING$(2,CHR$(32));STRING$(3,CHR$(178));STRING$(3,CHR$(32));
  157. 1160 LOCATE 26-Y*3,X*8+1,0
  158. 1161 PRINT CHR$(32)+"QUEEN"+CHR$(32);CHR$(32);
  159. 1162 LOCATE 27-Y*3,X*8+1,0
  160. 1163 PRINT STRING$(2,CHR$(32));STRING$(3,CHR$(178));STRING$(3,CHR$(32));            :RETURN
  161. 1170 LOCATE 25-Y*3,X*8+1,0
  162. 1171 PRINT STRING$(2,CHR$(32));STRING$(3,CHR$(176));STRING$(3,CHR$(32));
  163. 1180 LOCATE 26-Y*3,X*8+1,0
  164. 1181 PRINT CHR$(32)+"QUEEN"+CHR$(32);CHR$(32);
  165. 1182 LOCATE 27-Y*3,X*8+1,0
  166. 1183 PRINT STRING$(2,CHR$(32));STRING$(3,CHR$(176));STRING$(3,CHR$(32));            :RETURN
  167. 1190 IF I*A(X,Y)<0 THEN GOTO 1220
  168. 1200 LOCATE 25-Y*3,X*8+1,0
  169. 1201 PRINT STRING$(2,CHR$(219));STRING$(4,CHR$(178));STRING$(2,CHR$(219));
  170. 1210 LOCATE 26-Y*3,X*8+1,0
  171. 1211 PRINT CHR$(219);CHR$(178)+"KING"+CHR$(178);CHR$(219);
  172. 1212 LOCATE 27-Y*3,X*8+1,0
  173. 1213 PRINT STRING$(2,CHR$(219));STRING$(4,CHR$(178));STRING$(2,CHR$(219));          :RETURN
  174. 1220 LOCATE 25-Y*3,X*8+1,0
  175. 1221 PRINT STRING$(2,CHR$(219));STRING$(4,CHR$(176));STRING$(2,CHR$(219));
  176. 1230 LOCATE 26-Y*3,X*8+1,0
  177. 1231 PRINT CHR$(219);CHR$(176)+"KING"+CHR$(176);CHR$(219);
  178. 1232 LOCATE 27-Y*3,X*8+1,0
  179. 1233 PRINT STRING$(2,CHR$(219));STRING$(4,CHR$(176));STRING$(2,CHR$(219));          :RETURN
  180. 1240 IF I*A(X,Y)<0 THEN GOTO 1270
  181. 1250 LOCATE 25-Y*3,X*8+1,0
  182. 1251 PRINT STRING$(2,CHR$(32));STRING$(4,CHR$(178));STRING$(2,CHR$(32));
  183. 1260 LOCATE 26-Y*3,X*8+1,0
  184. 1261 PRINT CHR$(32);CHR$(178)+"KING"+CHR$(178);CHR$(32);
  185. 1262 LOCATE 27-Y*3,X*8+1,0
  186. 1263 PRINT STRING$(2,CHR$(32));STRING$(4,CHR$(178));STRING$(2,CHR$(32));            :RETURN
  187. 1270 LOCATE 25-Y*3,X*8+1,0
  188. 1271 PRINT STRING$(2,CHR$(32));STRING$(4,CHR$(176));STRING$(2,CHR$(32));
  189. 1280 LOCATE 26-Y*3,X*8+1,0
  190. 1281 PRINT CHR$(32);CHR$(176)+"KING"+CHR$(176);CHR$(32);
  191. 1282 LOCATE 27-Y*3,X*8+1,0
  192. 1283 PRINT STRING$(2,CHR$(32));STRING$(4,CHR$(176));STRING$(2,CHR$(32));            :RETURN
  193. 1290 IF I*A(X,Y)<0 THEN GOTO 1320
  194. 1300 LOCATE 25-Y*3,X*8+1,0
  195. 1301 PRINT STRING$(3,CHR$(219));STRING$(2,CHR$(178));STRING$(3,CHR$(219));
  196. 1310 LOCATE 26-Y*3,X*8+1,0
  197. 1311 PRINT CHR$(219)+"KNIGHT"+CHR$(219);
  198. 1312 LOCATE 27-Y*3,X*8+1,0
  199. 1313 PRINT STRING$(3,CHR$(219));STRING$(2,CHR$(178));STRING$(3,CHR$(219));          :RETURN
  200. 1320 LOCATE 25-Y*3,X*8+1,0
  201. 1321 PRINT STRING$(3,CHR$(219));STRING$(2,CHR$(176));STRING$(3,CHR$(219));
  202. 1330 LOCATE 26-Y*3,X*8+1,0
  203. 1331 PRINT CHR$(219)+"KNIGHT"+CHR$(219);
  204. 1332 LOCATE 27-Y*3,X*8+1,0
  205. 1333 PRINT STRING$(3,CHR$(219));STRING$(2,CHR$(176));STRING$(3,CHR$(219));          :RETURN
  206. 1340 IF I*A(X,Y)<0 THEN GOTO 1370
  207. 1350 LOCATE 25-Y*3,X*8+1,0
  208. 1351 PRINT STRING$(3,CHR$(32));STRING$(2,CHR$(178));STRING$(3,CHR$(32));
  209. 1360 LOCATE 26-Y*3,X*8+1,0
  210. 1361 PRINT CHR$(32)+"KNIGHT"+CHR$(32);
  211. 1362 LOCATE 27-Y*3,X*8+1,0
  212. 1363 PRINT STRING$(3,CHR$(32));STRING$(2,CHR$(178));STRING$(3,CHR$(32));            :RETURN
  213. 1370 LOCATE 25-Y*3,X*8+1,0
  214. 1371 PRINT STRING$(3,CHR$(32));STRING$(2,CHR$(176));STRING$(3,CHR$(32));
  215. 1380 LOCATE 26-Y*3,X*8+1,0
  216. 1381 PRINT CHR$(32)+"KNIGHT"+CHR$(32);
  217. 1382 LOCATE 27-Y*3,X*8+1,0
  218. 1383 PRINT STRING$(3,CHR$(32));STRING$(2,CHR$(176));STRING$(3,CHR$(32));            :RETURN
  219. 1390 IF I*A(X,Y)<0 THEN GOTO 1420
  220. 1400 LOCATE 25-Y*3,X*8+1,0
  221. 1401 PRINT STRING$(3,CHR$(219));STRING$(2,CHR$(178));STRING$(3,CHR$(219));
  222. 1410 LOCATE 26-Y*3,X*8+1,0
  223. 1411 PRINT CHR$(219)+"BISHOP"+CHR$(219);
  224. 1412 LOCATE 27-Y*3,X*8+1,0
  225. 1413 PRINT STRING$(3,CHR$(219));STRING$(2,CHR$(178));STRING$(3,CHR$(219));          :RETURN
  226. 1420 LOCATE 25-Y*3,X*8+1,0
  227. 1421 PRINT STRING$(3,CHR$(219));STRING$(2,CHR$(176));STRING$(3,CHR$(219));
  228. 1430 LOCATE 26-Y*3,X*8+1,0
  229. 1431 PRINT CHR$(219)+"BISHOP"+CHR$(219);
  230. 1432 LOCATE 27-Y*3,X*8+1,0
  231. 1433 PRINT STRING$(3,CHR$(219));STRING$(2,CHR$(176));STRING$(3,CHR$(219));          :RETURN
  232. 1440 IF I*A(X,Y)<0 THEN GOTO 1470
  233. 1450 LOCATE 25-Y*3,X*8+1,0
  234. 1451 PRINT STRING$(3,CHR$(32));STRING$(2,CHR$(178));STRING$(3,CHR$(32));
  235. 1460 LOCATE 26-Y*3,X*8+1,0
  236. 1461 PRINT CHR$(32)+"BISHOP"+CHR$(32);
  237. 1462 LOCATE 27-Y*3,X*8+1,0
  238. 1463 PRINT STRING$(3,CHR$(32));STRING$(2,CHR$(178));STRING$(3,CHR$(32));            :RETURN
  239. 1470 LOCATE 25-Y*3,X*8+1,0
  240. 1471 PRINT STRING$(3,CHR$(32));STRING$(2,CHR$(176));STRING$(3,CHR$(32));
  241. 1480 LOCATE 26-Y*3,X*8+1,0
  242. 1481 PRINT CHR$(32)+"BISHOP"+CHR$(32);
  243. 1482 LOCATE 27-Y*3,X*8+1,0
  244. 1483 PRINT STRING$(3,CHR$(32));STRING$(2,CHR$(176));STRING$(3,CHR$(32));            :RETURN
  245. 1490 IF I*A(X,Y)<0 THEN GOTO 1520
  246. 1500 LOCATE 25-Y*3,X*8+1,0
  247. 1501 PRINT CHR$(219);CHR$(219);CHR$(178);CHR$(219);CHR$(219);CHR$(178);              CHR$(219);CHR$(219);
  248. 1510 LOCATE 26-Y*3,X*8+1,0
  249. 1511 PRINT CHR$(219);CHR$(219)+"ROOK"+CHR$(219);CHR$(219);
  250. 1512 LOCATE 27-Y*3,X*8+1,0
  251. 1513 PRINT STRING$(2,CHR$(219));STRING$(4,CHR$(178));STRING$(2,CHR$(219));          :RETURN
  252. 1520 LOCATE 25-Y*3,X*8+1,0
  253. 1521 PRINT CHR$(219);CHR$(219);CHR$(176);CHR$(219);CHR$(219);CHR$(176);              CHR$(219);CHR$(219);
  254. 1530 LOCATE 26-Y*3,X*8+1,0
  255. 1531 PRINT CHR$(219);CHR$(219)+"ROOK"+CHR$(219);CHR$(219);
  256. 1532 LOCATE 27-Y*3,X*8+1,0
  257. 1533 PRINT STRING$(2,CHR$(219));STRING$(4,CHR$(176));STRING$(2,CHR$(219));          :RETURN
  258. 1540 IF I*A(X,Y)<0 THEN GOTO 1570
  259. 1550 LOCATE 25-Y*3,X*8+1,0
  260. 1551 PRINT CHR$(32);CHR$(32);CHR$(178);CHR$(32);CHR$(32);CHR$(178);                  CHR$(32);CHR$(32);
  261. 1560 LOCATE 26-Y*3,X*8+1,0
  262. 1561 PRINT CHR$(32);CHR$(32)+"ROOK"+CHR$(32);CHR$(32);
  263. 1562 LOCATE 27-Y*3,X*8+1,0
  264. 1563 PRINT STRING$(2,CHR$(32));STRING$(4,CHR$(178));STRING$(2,CHR$(32));            :RETURN
  265. 1570 LOCATE 25-Y*3,X*8+1,0
  266. 1571 PRINT CHR$(32);CHR$(32);CHR$(176);CHR$(32);CHR$(32);CHR$(176);                  CHR$(32);CHR$(32);
  267. 1580 LOCATE 26-Y*3,X*8+1,0
  268. 1581 PRINT CHR$(32);CHR$(32)+"ROOK"+CHR$(32);CHR$(32);
  269. 1582 LOCATE 27-Y*3,X*8+1,0
  270. 1583 PRINT STRING$(2,CHR$(32));STRING$(4,CHR$(176));STRING$(2,CHR$(32));            :RETURN
  271. 1590 LOCATE 25,31,1:PRINT STRING$(10," ");
  272. 1600 X$=INKEY$:IF X$="N" THEN N$=X$
  273. 1610 IF X$>="A" AND X$<="H" THEN X=VAL(CHR$(ASC(X$)-16)):GOTO 1730
  274. 1620 IF X$="N" THEN GOSUB 2030
  275. 1630 IF X$="K" AND A(5,1)=99 AND A(8,1)=7 THEN A(5,1)=1:A(8,1)=1:A(7,1)=99          :A(6,1)=7:GOTO 1800
  276. 1640 IF X$="Q" AND A(5,1)=99 AND A(1,1)=7 THEN A(5,1)=1:A(1,1)=1:A(3,1)=99          :A(4,1)=7:GOTO 1800
  277. 1650 IF X$="K" AND A(4,1)=99 AND A(1,1)=7 THEN A(4,1)=1:A(1,1)=1:A(2,1)=99          :A(3,1)=7:GOTO 1800
  278. 1660 IF X$="Q" AND A(4,1)=99 AND A(8,1)=7 THEN A(4,1)=1:A(8,1)=1:A(6,1)=99          :A(5,1)=7:GOTO 1800
  279. 1670 IF X$="X" THEN GOSUB 1830:LOCATE 25,1,0:PRINT "EXCHANGING         ";           :GOSUB 2480:IF CL$="Y" THEN LOCATE 25,50,0:PRINT "START ";TIME$;:GOTO 100       :ELSE:GOTO 100
  280. 1680 IF X$="S" THEN GOTO 1820
  281. 1690 IF X$="M" THEN GOSUB 1840
  282. 1700 IF X$="I" THEN GOSUB 2220:CLS:GOSUB 900:LOCATE 25,1,1                          :PRINT "MOVE "+CHR$(7);B$;
  283. 1710 IF X$="L" THEN GOSUB 2040
  284. 1720 GOTO 1600
  285. 1730 LOCATE 25,21,1:PRINT X$;:LOCATE 25,31,1:PRINT "            ";
  286. 1740 Y=VAL(INKEY$):IF Y=0 THEN GOTO 1740
  287. 1750 LOCATE 25,22,1:PRINT Y;:LOCATE 25,25,1:PRINT "-";
  288. 1760 IF A(X,Y)<2 OR A(X,Y)>99 THEN LOCATE 25,31,1:PRINT "ENTRY ERROR ";             :GOTO 1590
  289. 1770 A$=INKEY$:IF A$<"A" OR A$>"H" THEN GOTO 1770 ELSE A=VAL(CHR$(ASC(A$)-16))
  290. 1780 LOCATE 25,27,1:PRINT A$;
  291. 1790 B=VAL(INKEY$):IF B=0 THEN GOTO 1790 ELSE LOCATE 25,28,1:PRINT B;
  292. 1800 IF X$="K" OR X$="Q" THEN LOCATE 25,20,1:PRINT "CSTL. ";X$;"-SIDE";             :GOSUB 1830 ELSE GOSUB 1830
  293. 1810 IF CL$="Y" THEN LOCATE 25,50,0:PRINT "START ";TIME$;
  294. 1820 RETURN
  295. 1830 LOCATE 25,1,1:PRINT STRING$(79," ");:RETURN
  296. 1840 GOSUB 1830:LOCATE 25,1,1:PRINT "MODIFYING          ";
  297. 1850 GOSUB 2010:IF M$<"A" OR M$>"H" THEN GOTO 1850
  298. 1860 X=VAL(CHR$(ASC(M$)-16)):LOCATE 25,21,1:PRINT M$;
  299. 1870 M$=INKEY$:IF M$<"1" OR M$>"8" THEN GOTO 1870
  300. 1880 Y=VAL(M$):LOCATE 25,23,1:PRINT M$;" = ";
  301. 1890 M$=INKEY$:IF M$="C" OR M$="P" OR M$="E" THEN S1$=M$:LOCATE 25,27,1             :PRINT M$;:ELSE GOTO 1890
  302. 1900 M$=INKEY$:IF M$="S" OR M$="P" OR M$="N" OR M$="B" OR M$="R" OR M$="Q" OR        M$="K" THEN V$=M$:LOCATE 25,29,1:PRINT M$; ELSE GOTO 1900
  303. 1910 IF V$="P" THEN V1=2
  304. 1920 IF V$="N" THEN V1=4
  305. 1930 IF V$="B" THEN V1=5
  306. 1940 IF V$="R" THEN V1=7
  307. 1950 IF V$="Q" THEN V1=9
  308. 1960 IF V$="K" THEN V1=99
  309. 1970 IF V$="S" THEN V1=1
  310. 1980 IF S1$="C" AND V1<>1 THEN V1=-V1
  311. 1990 A(X,Y)=V1:IF S1$="E" THEN A(X,Y)=1
  312. 2000 GOSUB 910:GOTO 1840
  313. 2010 M$=INKEY$:IF M$="N" THEN GOSUB 2030:GOTO 2010:ELSE IF M$="Z" THEN               GOSUB 1830:LOCATE 25,20,1:PRINT "         ";:GOSUB 900:ELSE RETURN
  314. 2020 IF CL$="Y" THEN LOCATE 25,51,0:PRINT "START ";TIME$;:GOTO 100 ELSE GOTO 100
  315. 2030 FOR J=1 TO 8:FOR K=1 TO 8:K$=STR$(K)
  316. 2031 LOCATE 27-K*3,J*8+1,0
  317. 2032 PRINT CHR$(J+64);RIGHT$(K$,1);:NEXT:NEXT:RETURN
  318. 2040 GOSUB 1830:LOCATE 25,20,1:PRINT "LEVEL=";B8!;:PRINT "CHANGE LEVELS?";
  319. 2050 C$=INKEY$:IF C$="N" THEN GOTO 2090 ELSE IF C$="Y" THEN LOCATE 25,27,1          :PRINT "       ";:GOSUB 1830:ELSE GOTO 2050
  320. 2060 L1$=INKEY$:IF L1$="" THEN GOTO 2060 ELSE IF L1$>="0" AND L1$<="9" THEN          LOCATE 25,27,1:PRINT L1$;:ELSE GOTO 2060
  321. 2070 L2$=INKEY$:IF L2$="" THEN GOTO 2070 ELSE IF L2$<"0" OR L2$>"9" THEN L2$=L1$    :L1$="0"
  322. 2080 B8!=VAL(L1$)*10+VAL(L2$):B7!=B8!/2:LOCATE 25,27,0:PRINT L1$;L2$;
  323. 2090 GOSUB 1830:LOCATE 25,20,0:PRINT "              ";:LOCATE 25,1,1                :PRINT "MOVE ";B$;:RETURN
  324. 2100 REM *** PROMOTION ROUTINE ***
  325. 2110 LOCATE 2,1,1:PRINT "P, N, B, R, Q ";
  326. 2120 Z$=INKEY$:IF Z$="P" THEN A(A,B)=2:GOTO 2180
  327. 2130 IF Z$="N" THEN A(A,B)=4:GOTO 2180
  328. 2140 IF Z$="B" THEN A(A,B)=5:GOTO 2180
  329. 2150 IF Z$="R" THEN A(A,B)=7:GOTO 2180
  330. 2160 IF Z$="Q" THEN A(A,B)=9:GOTO 2180
  331. 2170 GOTO 2120
  332. 2180 RETURN
  333. 2190 IF CL$="Y" THEN LOCATE 25,61,1:PRINT "STOP ";TIME$;
  334. 2200 LOCATE 25,1,1:PRINT "HIT (P) TO PLAY OR HIT (B) FOR BASIC";
  335. 2210 A$=INKEY$:IF A$="" THEN GOTO 2210 ELSE IF A$="B" THEN CLS:END                   ELSE IF A$="P" THEN RUN ELSE GOTO 2210
  336. 2220 CLS
  337. 2221 PRINT "1. USE LIST TO INSURE LOADED RIGHT, THE LAST LINE IS 65529 "
  338. 2230 PRINT "2. ALSE NOTE MEMORY SIZE AS A DOUBLE CHECK "
  339. 2240 PRINT "3. SPECIAL COMMANDS DURING PLAYER'S MOVE ARE:"
  340. 2250 PRINT "   TYPE 'N' - TO NUMBER THE BOARD "
  341. 2260 PRINT "        'K' - TO CASTLE KING SIDE "
  342. 2270 PRINT "        'Q' - TO CASTLE QUEEN SIDE "
  343. 2280 PRINT "        'X' - TO EXCHANGE PIECES AND LET COMPUTER MOVE"
  344. 2290 PRINT "        'S' - TO LET THE COMPUTER PLAY BY ITSELF "
  345. 2300 PRINT "        'M' - TO MODIFY THE BOARD, ENTER THE SQUARE FOLLOWED BY"
  346. 2310 PRINT "                 C, P, OR E  FOR COMPUTER, PLAYER, OR EMPTY"
  347. 2320 PRINT "                 AND S,P,N,B,R,Q,K  FOR SQUARE,PAWN, ETC..."
  348. 2330 PRINT "        'Z' - TO ESCAPE MODIFY AND LET COMPUTER MOVE"
  349. 2340 PRINT "        'I' - TO GET INSTRUCTIONS AGAIN"
  350. 2350 PRINT "        'L' - TO LOOK AT OR CHANGE LEVEL OF PLAY"
  351. 2360 REM ********************************************************************
  352. 2370 INPUT "HIT ENTER TO CONTINUE";EN$:PRINT
  353. 2380 PRINT "4. TO PROMOTE TO P,N,B,R,Q ENTER THE LETTER WHEN PROMOTED"
  354. 2390 PRINT "5. TO CAPTURE 'EN PASSANT' SPECIFY THE 'FROM' - 'TO' SQUARES"
  355. 2400 PRINT "6. LEVELS OF PLAY ARE FROM 01 TO 24"
  356. 2410 PRINT "7. COMPUTER ASSUMES MATE IF KING IS LEFT IN CHECK SO BE SURE TO "
  357. 2411 PRINT "    WATCH FOR CHECK MESSAGE"
  358. 2420 PRINT "8. IF A MOVE IS ILLEGAL OR AN ENTRY ERROR IS MADE SIMPLY TYPE IN"
  359. 2421 PRINT "    A NEW MOVE.  A MOVE MAY BE STARTED OVER BY FORCING AN ERROR. (E.G. '9')."
  360. 2430 PRINT "9. IF <BREAK> IS HIT DURING THE GAME, TYPE 'GOSUB 900:CONT' TO"
  361. 2435 PRINT "    DRAW BOARD AND CONTINUE"
  362. 2440 PRINT "10. YOU HAVE A CHOICE OF BLACK OR WHITE, THE COMPUTER WILL ALWAYS"
  363. 2441 PRINT "     BE AT THE TOP OF THE SCREEN"
  364. 2450 PRINT:PRINT:INPUT "HIT ENTER TO CONTINUE GAME";EN$
  365. 2460 RETURN
  366. 2480 I=-I:GOSUB 2490:GOSUB 900:RETURN
  367. 2490 L=0:FOR J=1 TO 8:FOR K=1 TO 8:L=L+1:IF A(J,K)<>1 THEN C(L)=-A(J,K)             :ELSE C(L)=A(J,K)
  368. 2500 NEXT:NEXT
  369. 2510 L=65:FOR J=1 TO 8: FOR K=1 TO 8:L=L-1:A(J,K)=C(L):NEXT:NEXT
  370. 2520 RETURN
  371. 65529 END
  372.